var MovimentacaoLista = Ext.extend(
				Ext.grid.GridPanel,
				{
					$depends : [ strPastaUx + "GridFilters",
							strPastaUx + "ProgressBarPager",
							strPastaUx + "GroupSummary" ],
					loadMask : true,
					border : false,
					frame : true,
					stripeRows : true,
					id : "MovimentacaoLista",
					autoScroll : true,
					initComponent : function() {
						this.storeDepartamento = new Ext.data.JsonStore(
								{
									autoLoad : true,
									url : "include/administracao/departamentoAction.php?action=listarDepartamentos",
									root : "rows",
									fields : [ {
										name : "id"
									}, {
										name : "descricao"
									} ]
								});
						this.storeMovimentacoes = new Ext.data.JsonGroupingStore(
								{
									remoteSort : true,
									root : "rows",
									idProperty : "id",
									totalProperty : "total",
									url : "include/tesouraria/movimentacaoAction.php?action=listarMovimentacoes",
									groupField : "departamento",
									baseParams : {
										start : 0,
										limit : 40
									},
									fields : [ {
										name : "id",
										type : "int"
									}, {
										name : "id_departamento",
										type : "int"
									}, {
										name : "departamento",
										type : "string"
									}, {
										name : "tipo_movimentacao",
										type : "string"
									}, {
										name : "data_movimentacao",
										type : "date",
										dateFormat : "Y-m-d"
									}, {
										name : "responsavel",
										type : "string"
									}, {
										name : "valor",
										type : "float"
									}, {
										name : "movimentacoes",
										type : "int"
									}, {
										name : "totalEntrada",
										type : "float"
									}, {
										name : "totalSaida",
										type : "float"
									}, {
										name : "totalEntradaGeral",
										type : "float"
									}, {
										name : "totalSaidaGeral",
										type : "float"
									} ],
									listeners : {
										load : function(d) {
											if (d.getCount()) {
												var c = '<span style="color:green">'
														+ Ext.util.Format
																.brMoney(d
																		.getAt(0).json.totalEntradaGeral)
														+ "</span>";
												var b = '<span style="color:red">'
														+ Ext.util.Format
																.brMoney(d
																		.getAt(0).json.totalSaidaGeral)
														+ "</span>";
												var a = d.getAt(0).json.totalEntradaGeral
														- d.getAt(0).json.totalSaidaGeral;
												var f = Ext.util.Format
														.brMoney(d.getAt(0).json.totalEntradaGeral
																- d.getAt(0).json.totalSaidaGeral);
												var e = (a < 0) ? "red"
														: "green"
											} else {
												var c = '<span style="color:green">'
														+ Ext.util.Format
																.brMoney(0)
														+ "</span>";
												var b = '<span style="color:red">'
														+ Ext.util.Format
																.brMoney(0)
														+ "</span>";
												var f = '<span style="color:green">'
														+ Ext.util.Format
																.brMoney(0)
														+ "</span>"
											}
											Ext.getCmp("totalEntradas")
													.setText(
															"<b>Total de Entradas: </b>"
																	+ c);
											Ext.getCmp("totalSaidas").setText(
													"<b>Total de Saídas: </b>"
															+ b);
											Ext
													.getCmp("saldoTotal")
													.setText(
															'<b>Saldo Total Geral: <span style="color:'
																	+ e
																	+ '"><b>'
																	+ f
																	+ "</b></span></b>")
										}
									}
								});
						this.filtroMovimentacoes = new Ext.ux.grid.GridFilters(
								{
									encode : true,
									menuFilterText : "Filtro",
									filters : [ {
										type : "list",
										dataIndex : "departamento",
										store : this.storeDepartamento,
										labelField : "descricao",
										phpMode : true
									}, {
										type : "list",
										dataIndex : "tipo_movimentacao",
										options : [ "Entrada", "Saída" ],
										phpMode : true
									}, {
										type : "date",
										dataIndex : "data_movimentacao",
										dateFormat : "d/m/Y",
										beforeText : "Antes de",
										afterText : "Após",
										onText : "Em"
									}, {
										type : "string",
										dataIndex : "responsavel",
										emptyText : "Responsável"
									}, {
										type : "numeric",
										dataIndex : "valor",
										menuItemCfgs : {
											emptyText : "Valor"
										}
									} ]
								});
						Ext.ux.grid.GroupSummary.Calculations.totalSaldo = function(
								b, a, f) {
							var d = (a.json.totalEntrada == "") ? 0
									: a.json.totalEntrada;
							var c = (a.json.totalSaida == "") ? 0
									: a.json.totalSaida;
							var e = d - c;
							return e
						};
						Ext.ux.grid.GroupSummary.Calculations.totalMovimentacoes = function(
								b, a, c) {
							return a.json.movimentacoes
						};
						Ext
								.apply(
										this,
										{
											listeners : {
												keypress : function(a) {
													if (a.getKey() == Ext.EventObject.RETURN) {
														this
																.exibirJanelaMovimentacao(this)
													}
												}
											},
											store : this.storeMovimentacoes,
											plugins : [
													this.filtroMovimentacoes,
													new Ext.ux.grid.GroupSummary() ],
											tbar : [
													{
														text : "Cadastrar novo",
														tooltip : "Cadastrar nova Movimentação",
														iconCls : "silk-tesouraria-add",
														scope : this,
														handler : this.cadastrarMovimentacao
													},
													"-",
													{
														text : "Excluir Selecionado(s)",
														tooltip : "Excluir Movimentação(ões) selecionada(s)",
														iconCls : "silk-tesouraria-delete",
														scope : this,
														handler : this.confExcluirMovimentacao
													},
													"->",
													{
														text : "Gráficos",
														tooltip : "Visualizar gráficos da listagem atual",
														iconCls : "silk-grafico-coluna",
														scope : this,
														handler : this.emitirGraficoMovimentacao
													},
													"-",
													{
														text : "Relatório",
														tooltip : "Imprimir Listagem Atual",
														iconCls : "silk-historico-classe",
														scope : this,
														handler : this.emitirRelatorioMovimentacao
													},
													"-",
													{
														text : "Limpar Filtros",
														tooltip : "Limpar filtros aplicados na listagem",
														id : "btnLimpaFiltroMovimentacoes",
														iconCls : "silk-filter-delete",
														scope : this,
														handler : function() {
															limparFiltros(this)
														}
													} ],
											columns : [
													{
														header : "<b>Departamento</b>",
														width : 120,
														id : "departamento",
														filter : {
															type : "list"
														},
														sortable : true,
														filterable : true,
														dataIndex : "departamento",
														summaryType : "totalMovimentacoes",
														hideable : false,
														summaryRenderer : function(
																a, c, b) {
															return ((a === 0 || a > 1) ? "("
																	+ a
																	+ " Movimentações)"
																	: "(1 Movimentação)")
														}
													},
													{
														header : "<b>Tipo</b>",
														renderer : function(a,
																c, b) {
															return (a == "Entrada") ? '<span style="color:green;">'
																	+ a
																	+ "</span>"
																	: '<span style="color:red;">'
																			+ a
																			+ "</span>"
														},
														id : "tipo_movimentacao",
														filter : {
															type : "list"
														},
														sortable : true,
														filterable : true,
														dataIndex : "tipo_movimentacao"
													},
													{
														header : "<b>Data</b>",
														id : "data_movimentacao",
														filter : {
															type : "date"
														},
														renderer : Ext.util.Format
																.dateRenderer("d/m/Y"),
														sortable : true,
														filterable : true,
														dataIndex : "data_movimentacao"
													},
													{
														header : "<b>Responsável</b>",
														width : 150,
														id : "responsavel",
														filter : {
															type : "string"
														},
														sortable : true,
														filterable : true,
														dataIndex : "responsavel"
													},
													{
														header : "<b>Valor</b>",
														renderer : function(c,
																d, b) {
															var a = Ext.util.Format
																	.brMoney(c);
															return (b.data.tipo_movimentacao == "Entrada") ? '<span style="color:green;">'
																	+ a
																	+ "</span>"
																	: '<span style="color:red;">'
																			+ a
																			+ "</span>"
														},
														summaryType : "totalSaldo",
														summaryRenderer : function(
																b, e, c) {
															var d = (b < 0) ? "red"
																	: "green";
															var a = Ext.util.Format
																	.brMoney(b);
															return '<span style="color:'
																	+ d
																	+ ';">'
																	+ a
																	+ "</span>"
														},
														id : "valor",
														filter : {
															type : "numeric"
														},
														align : "right",
														sortable : true,
														filterable : true,
														dataIndex : "valor"
													} ],
											view : new Ext.grid.GroupingView(
													{
														forceFit : true,
														emptyText : "<center>Nenhum registro encontrado</center>",
														enableNoGroups : false,
														enableGroupingMenu : false
													}),
											bbar : new Ext.PagingToolbar(
													{
														pageSize : this.storeMovimentacoes.baseParams.limit,
														store : this.storeMovimentacoes,
														plugins : [
																this.filtroMovimentacoes,
																new Ext.ux.ProgressBarPager() ],
														displayInfo : true,
														displayMsg : "Exibindo {0} - {1} de {2} registro(s)",
														emptyMsg : "Nenhum registro encontrado",
														items : [
																"-",
																{
																	text : "",
																	id : "totalEntradas",
																	xtype : "tbtext"
																},
																"-",
																{
																	text : "",
																	id : "totalSaidas",
																	xtype : "tbtext"
																},
																"-",
																{
																	text : "",
																	id : "saldoTotal",
																	xtype : "tbtext"
																} ]
													})
										});
						MovimentacaoLista.superclass.initComponent.call(this)
					},
					initEvents : function() {
						MovimentacaoLista.superclass.initEvents.call(this);
						this.on( {
							scope : this,
							rowdblclick : this.exibirJanelaMovimentacao
						});
						this.on("afterrender", this.loadStore)
					},
					loadStore : function() {
						this.storeMovimentacoes.load()
					},
					onDestroy : function() {
						MovimentacaoLista.superclass.onDestroy.apply(this,
								arguments);
						Ext.destroy(this.janelaMovimentacao);
						this.janelaMovimentacao = null;
						Ext.destroy(this.janelaMovimentacaoGrafico);
						this.janelaMovimentacaoGrafico = null
					},
					confExcluirMovimentacao : function() {
						var a = this.getSelectionModel().getSelections();
						if (a.length === 0) {
							msgAlerta("Nenhum registro selecionado");
							return false
						}
						Ext.Msg
								.confirm(
										"Confirmação",
										"Tem certeza que deseja excluir o(s) registro(s) selecionado(s)?",
										function(b) {
											if (b === "yes") {
												excluirRegistros(
														"include/tesouraria/movimentacaoAction.php?action=excluirMovimentacao",
														a, this)
											} else {
												return
											}
										}, this)
					},
					onSalvarMovimentacao : function() {
						this.store.reload()
					},
					novaJanelaMovimentacao : function() {
						if (!this.janelaMovimentacao) {
							this.janelaMovimentacao = new MovimentacaoCadastro(
									{
										listeners : {
											scope : this,
											salvar : this.onSalvarMovimentacao
										}
									})
						}
						return this.janelaMovimentacao
					},
					cadastrarMovimentacao : function() {
						Ext.require.moduleUrl = "js/tesouraria/";
						Ext.require("MovimentacaoCadastro", function() {
							this.novaJanelaMovimentacao();
							this.janelaMovimentacao.setIdMovimentacao(0);
							this.janelaMovimentacao.show()
						}, this)
					},
					exibirJanelaMovimentacao : function(b, f, c) {
						var a = b.getSelectionModel().getSelected();
						var d = a.get("id");
						Ext.require.moduleUrl = "js/tesouraria/";
						Ext.require("MovimentacaoCadastro", function() {
							this.novaJanelaMovimentacao();
							this.janelaMovimentacao.setIdMovimentacao(d);
							this.janelaMovimentacao.show()
						}, this)
					},
					emitirRelatorioMovimentacao : function() {
						var a = "data_movimentacao DESC";
						var b = Ext.encode(this.filtroMovimentacoes
								.getFiltros());
						if (this.storeMovimentacoes.sortInfo) {
							a = this.storeMovimentacoes.sortInfo.field
									+ " "
									+ this.storeMovimentacoes.sortInfo.direction
						}
						if (Ext.isIE) {
							window
									.open("include/tesouraria/relatorioMovimentacoes.php?filter="
											+ b + "&order=" + a + "")
						} else {
							enviaFiltroRelatorio(
									"include/tesouraria/relatorioMovimentacoes.php",
									b, a)
						}
					},
					emitirGraficoMovimentacao : function() {
						var a = this.filtroMovimentacoes.getFiltros();
						Ext.getBody().mask("Carregando...");
						Ext.require.moduleUrl = "js/tesouraria/";
						Ext.require("MovimentacaoGrafico", function() {
							this.novaJanelaMovimentacaoGrafico();
							this.janelaMovimentacaoGrafico
									.setFiltroMovimentacoes(a);
							this.janelaMovimentacaoGrafico.show();
							Ext.getBody().unmask()
						}, this)
					},
					novaJanelaMovimentacaoGrafico : function() {
						if (!this.janelaMovimentacaoGrafico) {
							this.janelaMovimentacaoGrafico = new MovimentacaoGrafico()
						}
						return this.janelaMovimentacaoGrafico
					}
				});

Ext.reg("MovimentacaoLista", MovimentacaoLista);
